spacepaste

  1.  
  2. #define F_CPU 8000000UL
  3. #include <avr/io.h>
  4. #include <stdio.h>
  5. #include <inttypes.h>
  6. #include <stdint.h>
  7. #include <avr/pgmspace.h>
  8. #include <avr/interrupt.h>
  9. #include <util/delay.h>
  10. #include <util/atomic.h>
  11. #define BAUDRATE 9600
  12. #define NTCBETA 3600
  13. #define ONTEMP 4.0 // °C
  14. #define OFFTEMP 2.0 // °C
  15. #define ONTIME 60 // sec
  16. #define OFFTIME 180 // sec
  17. // attiny48
  18. // pins
  19. // 1 : PB5 reset, ADC0
  20. // 2 : PB3 ADC3 / COMPRESSOR
  21. // 3 : PB4 ADC2 / CAP
  22. // 4 : gnd
  23. // 5 : PB0 Mosi, AREF
  24. // 6 : PB1 Miso / TX
  25. // 7 : PB2 SCK, ADC1 / NTC
  26. // 8 : VCC
  27. #define COMPPIN PINB
  28. #define COMPDDR DDRB
  29. #define COMPPORT PORTB
  30. #define COMPBIT 3
  31. #define CAPPIN PINB
  32. #define CAPDDR DDRB
  33. #define CAPPORT PORTB
  34. #define CAPBIT 4
  35. #define NTCPIN PINB
  36. #define NTCPORT PORTB
  37. #define NTCDDR DDRB
  38. #define NTCMUX 1
  39. #define NTCBIT 2
  40. #define UARTTXPIN PINB
  41. #define UARTTXPORT PORTB
  42. #define UARTTXDDR DDRB
  43. #define UARTTXBIT 1
  44. //
  45. //
  46. //
  47. //
  48. volatile uint32_t secs = 0;
  49. volatile uint32_t cycles = 0;
  50. volatile uint8_t status = 0;
  51. volatile uint16_t tstatus = 0;
  52. void usart_bitdelay() {
  53. _delay_us(1000000/BAUDRATE); // 1e6 us / baudrate
  54. }
  55. void usart_putchar(char data) {
  56. // 0 start, LSB...MSB, 1 stop
  57. uint8_t i;
  58. // start bit, 0
  59. UARTTXPORT &= ~(1 << UARTTXBIT);
  60. usart_bitdelay();
  61. // 8 data bits
  62. for (i = 0; i < 7; i++) {
  63. if (data && 0x01) {
  64. // 1
  65. UARTTXPORT |= (1 << UARTTXBIT);
  66. } else
  67. // 0
  68. UARTTXPORT &= ~(1 << UARTTXBIT);
  69. }
  70. data = (data >> 1);
  71. usart_bitdelay();
  72. }
  73. // stop bit, 1
  74. UARTTXPORT |= (1 << UARTTXBIT);
  75. usart_bitdelay();
  76. }
  77. static FILE mystdout = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE);
  78. void getTemp() {
  79. nop();
  80. }
  81. void printData() {
  82. uint32_t lsecs;
  83. uint16_t lhours;
  84. uint8_t lmins;
  85. uint8_t lstatus;
  86. uint16_t ltstatus;
  87. double ltemp;
  88. ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
  89. lsecs = secs;
  90. lstatus = status;
  91. ltstatus = tstatus;
  92. };
  93. lhours = lsecs / 3600;
  94. lsecs = lsecs - (lhours * 3600);
  95. lmins = lsecs / 60;
  96. lsecs = lsecs - (lmins * 60);
  97. // xx_hour : xx_min : xx_sec _ _ Temp: +/- xx.x °C _ _ Status: [_on|off|_LO|] _ _ Since: xxxxx sec \n
  98. printf_P("%05d:%02d:%02d ", lhours, lmins, lsecs);
  99. printf_P("Temperature: % 05.1f °C ", ltemp);
  100. printf_P("Status: %s ", lstatus);
  101. printf_P("Since: %5d secs\n", ltstatus);
  102. }
  103. int main(void) {
  104. // set compressor pin to output, set to low
  105. COMPDDR |= (1<<COMPPIN);
  106. COMPPORT &= ~(1<<COMPPIN);
  107. // set capacitor pin to input with pullup
  108. // set adc
  109. // set timer
  110. // set uart
  111. // wait for cap to be empty
  112. //
  113. printData();
  114. return(0);
  115. }
  116.